import os
import random
import pygame

#屏幕大小常量
SCREEN_RECT=pygame.Rect(0,0,512,768)
#刷新帧率
FRAME_PER_SEC=60
#创建敌机的定时器常量
CREATE_ENEMY_EVENT=pygame.USEREVENT
#英雄定时器常量
HERO_FIRE_EVENT=pygame.USEREVENT+1
class GameSprite(pygame.sprite.Sprite):
    def __init__(self,image_name,speed=1):
        super().__init__()
        self.image=pygame.image.load(image_name).convert()
        self.rect=self.image.get_rect()
        self.speed=speed


    def update(self):
        self.rect.y+=self.speed



class Background(GameSprite):

    def __init__(self,is_alt=False):
        os.chdir('E:\pProject\plane')  # 获取背景图绝对路径
        bg_url = os.path.abspath("./img/img_bg_level_2.jpg")
        super().__init__(bg_url)
        if is_alt:
            self.rect.y=-self.rect.height

    def update(self):
        #1.调用父类的方法实现
        super().update()
        #判断是否移出屏幕，如果移出3屏幕，将图像设置到屏幕上方
        if self.rect.y>=SCREEN_RECT.height:
            self.rect.y=-self.rect.height


class Enemy(GameSprite):

    def __init__(self):
        #1.调用父类方法，创建敌机
        super().__init__("./img/wsparticle_money01.PNG",1)
        #2.指定敌机初始随机速度
        self.speed=random.randint(1,3)
        #3.指定敌机初始随机位置
        self.rect.bottom=0
        max_x=SCREEN_RECT.width-self.rect.width
        self.rect.x=random.randint(0,max_x)
    def update(self):
        super().update()
        #飞出屏幕从精灵组删除敌机
        if self.rect.y>=SCREEN_RECT.height:
            self.kill()#将精灵从所有精灵组中移出
    def __del__(self):
        print('del...')

class Hero(GameSprite):
    direction = True
    def __init__(self):
        #设置英雄图片和初始位置
        super().__init__("./img/wsparticle_test_001.png",0)
        self.rect.center=SCREEN_RECT.center
        self.rect.y = SCREEN_RECT.height - self.rect.height
        #创建子弹精灵组
        self.bullets=pygame.sprite.Group()
    #移动英雄
    def update(self,):
        if self.direction:
            self.rect.x+=self.speed
            if self.rect.x<=0:
                self.rect.x=0
            elif self.rect.right>=SCREEN_RECT.right:
                self.rect.right = SCREEN_RECT.right
        else:
            self.rect.y += self.speed
            if self.rect.top <= SCREEN_RECT.top:
                self.rect.y = 0
            elif self.rect.bottom >= SCREEN_RECT.bottom:
                self.rect.bottom = SCREEN_RECT.bottom
    def y_update(self):
        pass
    #开火事件
    def fire(self):

        for i in (0,1,2):
            bullet = Bullet()
            bullet.rect.bottom = self.rect.y - 20*i
            #bullet.rect.centerx = self.rect.centerx-((1-i)*20)
            bullet.rect.centerx = self.rect.centerx
            self.bullets.add(bullet)


class Bullet(GameSprite):
    def __init__(self):
        super().__init__("./img/wsparticle_24.png",-2)
    def update(self):
        super().update()
        if self.rect.bottom<0:
            self.kill()
    def __del__(self):
        print('del sut')